package com.example.service;

import java.util.List;
import java.util.Set;

import com.example.dto.ApiResponse;
import com.example.dto.ChangePasswordRequest;
import com.example.dto.JwtResponse;
import com.example.dto.LoginRequest;
import com.example.dto.RegisterRequest;
import com.example.dto.ResetPasswordRequest;
import com.example.dto.TokenResponse;
import com.example.dto.UpdateUserRequest;
import com.example.dto.UserDTO;
import com.example.entity.User;

public interface UserService {
    // 获取当前登录用户ID
    Long getCurrentUserId();

    JwtResponse authenticateUser(LoginRequest loginRequest);
    ApiResponse<?> registerUser(RegisterRequest registerRequest);

    // 密码重置相关方法
    TokenResponse generateResetToken(String username);
    ApiResponse<?> resetPassword(ResetPasswordRequest request);

    // 新增的用户管理方法
    List<User> getAllUsers();
    
    /**
     * 获取所有用户（包含角色信息）
     * @return 包含角色信息的用户列表
     */
    List<UserDTO> getAllUsersWithRoles();
    
    User getUserById(Long id);
    
    /**
     * 获取指定用户（包含角色信息）
     * @param id 用户ID
     * @return 包含角色信息的用户DTO
     */
    UserDTO getUserWithRolesById(Long id);
    
    User getUserByUsername(String username);
    ApiResponse<?> updateUser(Long id, UpdateUserRequest updateUserRequest);
    ApiResponse<?> deleteUser(Long id);
    ApiResponse<?> updateUserRoles(Long id, List<String> roles);
    ApiResponse<?> changePassword(Long id, ChangePasswordRequest changePasswordRequest);
    ApiResponse<?> updateAvatar(Long id, String avatarUrl);
    
    // 获取用户头像URL
    String getUserAvatarUrl(Long userId);
    
    // 批量操作方法
    void updateBatchUserRoles(List<Long> userIds, Set<String> roles);
    void registerBatchUsers(List<RegisterRequest> users);

    // 用户封禁相关方法
    ApiResponse<?> banUser(Long id);
    ApiResponse<?> unbanUser(Long id);
    ApiResponse<?> batchBanUsers(List<Long> userIds);
    ApiResponse<?> batchUnbanUsers(List<Long> userIds);
}